package org.jsola.hr.service;

import org.jsola.admin.dto.DictItemUpdateDTO;
import org.jsola.admin.entity.DictItemDO;
import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IEventHandlingDAO;
import org.jsola.hr.dto.EventHandlingAddDTO;
import org.jsola.hr.dto.EventHandlingUpdateDTO;
import org.jsola.hr.entity.EventHandlingDO;
import org.jsola.hr.query.EventHandlingQuery;
import org.jsola.hr.vo.EventHandlingListVO;
import org.jsola.hr.vo.EventHandlingVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 事件处理
 *
 * @author zhr
 */
public interface IEventHandlingService extends IService<IEventHandlingDAO, EventHandlingDO> {

    /**
     * 新增事件处理
     *
     * @param eventHandlingAddDTO 新增事件处理DTO
     * @param tokenUser           当前用户
     * @return 事件处理详情信息
     */
    EventHandlingVO save(EventHandlingAddDTO eventHandlingAddDTO, TokenUser tokenUser);

    /**
     * 修改事件处理
     *
     * @param eventHandlingUpdateDTO 修改事件处理DTO
     * @param tokenUser              当前用户
     * @return 更新数量
     */
    int update(EventHandlingUpdateDTO eventHandlingUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除事件处理，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser        当前用户
     * @param eventHandlingIds 事件处理id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... eventHandlingIds);

    /**
     * 根据事件处理id查找
     *
     * @param eventHandlingId 事件处理id
     * @param siteId          所属站点id
     * @return 事件处理详情信息
     */
    EventHandlingVO selectById(String eventHandlingId, String siteId);

    /**
     * 查询事件处理
     *
     * @param eventHandlingQuery 查询条件
     * @param siteId             所属站点id
     * @return 事件处理列表信息
     */
    List<EventHandlingListVO> select(EventHandlingQuery eventHandlingQuery, String siteId);

    /**
     * 查询事件处理记录数
     *
     * @param eventHandlingQuery 查询条件
     * @param siteId             所属站点id
     * @return 事件处理记录数
     */
    int selectCount(EventHandlingQuery eventHandlingQuery, String siteId);

    /**
     * 分页查询事件处理
     *
     * @param eventHandlingQuery 查询条件
     * @param tokenUser          当前用户
     * @return 事件处理列表信息
     */
    Page<EventHandlingListVO> selectPage(EventHandlingQuery eventHandlingQuery, TokenUser tokenUser);


    /**
     * 根据事件处理id查找
     *
     * @param eventHandlingId 事件处理id
     * @param siteId          所属站点id
     * @return 事件处理
     */
    EventHandlingDO selectDOById(String eventHandlingId, String siteId);

    /**
     * 查询事件处理
     *
     * @param eventHandlingQuery 查询条件
     * @param siteId             所属站点id
     * @return 事件处理列表
     */
    List<EventHandlingDO> selectDO(EventHandlingQuery eventHandlingQuery, String siteId);

    /**
     * 更新dict
     *
     * @param dictItem          查询结果(修改前)
     * @param dictItemUpdateDTO 更新内容(修改后)
     * @param tokenUser         登录用户
     */
    void updateDict(DictItemDO dictItem, DictItemUpdateDTO dictItemUpdateDTO, TokenUser tokenUser);

    /**
     * 查询dict
     *
     * @param dictItem  查询结果
     * @param tokenUser 登录用户
     * @return 使用当前标签的事件的数量
     */
    Integer selectDict(DictItemDO dictItem, TokenUser tokenUser);
}


